\documentclass[format=sigconf]{acmart}

\usepackage[utf8]{inputenc}
\usepackage{color}

\def\inputfig#1{\input #1}
\def\inputtex#1{\input #1}
\def\inputal#1{\input #1}
\def\inputcode#1{\input #1}
\newcommand\inputeps[1]{\includegraphics[width=\linewidth]{#1}}

\inputtex{logos.tex}
\inputtex{refmacros.tex}
\inputtex{other-macros.tex}
\inputtex{tikz-macros.tex}

\acmConference[ELS'19]{the 12th European Lisp Symposium}{April 01--02 2019}{%
  Genova, Italy}
\acmISBN{978-2-9557474-3-8}
\acmDOI{10.5281/zenodo.2634303}
\startPage{20}
\setcopyright{rightsretained}
\copyrightyear{2019}

\begin{document}
%\conferenceinfo{12th ELS}{April 1--2, 2019, Genoa, Italy}

\title{\texttt{make-method-lambda} revisited}

\author{Irène Durand}
\email{irene.durand@u-bordeaux.fr}

\author{Robert Strandh}
\email{robert.strandh@u-bordeaux.fr}

\affiliation{
  \institution{LaBRI, University of Bordeaux}
  \streetaddress{351 cours de la libération}
  \city{Talence}
  \country{France}}

%\numberofauthors{2}
%% \author{\alignauthor
%% Irène Durand\\
%% Robert Strandh\\
%% \affaddr{University of Bordeaux}\\
%% \affaddr{351, Cours de la Libération}\\
%% \affaddr{Talence, France}\\
%% \email{irene.durand@u-bordeaux.fr}
%% \email{robert.strandh@u-bordeaux.fr}}

%% \toappear{Permission to make digital or hard copies of all or part of
%%   this work for personal or classroom use is granted without fee
%%   provided that copies are not made or distributed for profit or
%%   commercial advantage and that copies bear this notice and the full
%%   citation on the first page. Copyrights for components of this work
%%   owned by others than the author(s) must be honored. Abstracting with
%%   credit is permitted. To copy otherwise, or republish, to post on
%%   servers or to redistribute to lists, requires prior specific
%%   permission and/or a fee. Request permissions from
%%   Permissions@acm.org.

%%   ELS '17, April 3 -- 6 2017, Brussels, Belgium
%%   Copyright is held by the owner/author(s). %Publication rights licensed to ACM.
%% %  ACM 978-1-4503-2931-6/14/08\$15.00.
%% %  http://dx.doi.org/10.1145/2635648.2635654
%% }


\def\cnh{Costanza and Herzeel}
\def\mml{\texttt{make\--method\--lambda}}
\begin{abstract}
The \commonlisp{}
% \cite{ansi:common:lisp}
metaobject protocol
%\cite{Kiczales:1991:AMP:574212}
specifies a generic function named
\mml{} to be called at macro-expansion time of the macro
\texttt{defmethod}.  In an article by \cnh{},
% \cite{Constanza:2008},
a number of problems with this generic function are discussed, and a
solution is proposed.

In this paper, we show that the alleged problems are due to the fact
that existing implementations do not include proper compile-time
processing of the associated macro \texttt{defgeneric}, and that with
proper compile-time processing, the problems indicated in the paper by
\cnh{} simply vanish.

The main characteristic of our proposed solution is for the
compile-time side effects of \texttt{defgeneric} to include saving the
name of the method class given as an option to that macro call.  With
this additional information, no difference exists between the behavior
of direct evaluation and that of file compilation of a
\texttt{defgeneric} form and a \texttt{defmethod} form mentioning the
same name of the generic function.
\end{abstract}

 \begin{CCSXML}
<ccs2012>
<concept>
<concept_id>10011007.10010940.10010971.10011682</concept_id>
<concept_desc>Software and its engineering~Abstraction, modeling and modularity</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10011007.10010940.10011003.10011002</concept_id>
<concept_desc>Software and its engineering~Software performance</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10011007.10011006.10011041</concept_id>
<concept_desc>Software and its engineering~Compilers</concept_desc>
<concept_significance>500</concept_significance>
</concept>
</ccs2012>
\end{CCSXML}

\ccsdesc[500]{Software and its engineering~Abstraction, modeling and modularity}
\ccsdesc[500]{Software and its engineering~Software performance}
\ccsdesc[500]{Software and its engineering~Compilers}

%\printccsdesc

\keywords{\commonlisp{}, Meta-Object Protocol}

\maketitle

\inputtex{spec-macros.tex}

\inputtex{sec-introduction.tex}
\inputtex{sec-previous.tex}
\inputtex{sec-our-method.tex}
\inputtex{sec-conclusions.tex}
%\inputtex{sec-acknowledgements.tex}
\inputtex{app-protocol.tex}

%\bibliographystyle{abbrv}
\bibliographystyle{plainnat}
\bibliography{make-method-lambda}
\end{document}
